package co.com.colcomercio.interfaceRecaudos.serPublicos.service;

import java.io.File;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.StringTokenizer;

import co.com.colcomercio.interfaceRecaudos.serPublicos.dao.RecaudosServiciosPublicosDAO;
import co.com.colcomercio.interfaceRecaudos.serPublicos.dao.impl.RecaudosServiciosPublicosDAOImpl;
import co.com.colcomercio.interfaceRecaudos.serPublicos.valueObject.RecaudoServiciosPublicosVO;
import co.com.colcomercio.util.Fechas;
import co.com.colcomercio.util.Formatos;
import co.com.colcomercio.util.ManejoParam;
import co.com.colcomercio.util.constants.GeneralConstants;
import co.com.colcomercio.util.exception.ServiceException;
import co.com.colcomercio.util.genArchivos.object.ArchivoTXT;
import co.com.colcomercio.util.genArchivos.object.DatoColumnaTXT;

public class RecaudoServiciosPublicosService {
		
	private RecaudosServiciosPublicosDAO recaudosServiciosPublicosDAO = null;
	private int numDetalles = 0;
	
	private void init()
	{
		if(recaudosServiciosPublicosDAO == null)
			recaudosServiciosPublicosDAO = new RecaudosServiciosPublicosDAOImpl();
	}
	
	// Se totaliza el valor de recaudo
	private BigDecimal total = null;

	
	/**
	 * Metodo que toma una fecha con formato yyyymmdd y con base en ella
	 * busca los recaudos de cada uno de los NITS de las empresas para las cuales
	 * se hace recaudo, por cada NIT carga un objeto de tipo ArchivoTXT el cual
	 * tiene un metodo que crea el archivo fisico txt como tal. 
	 * @param fecha
	 * @param ruta
	 * @return
	 * @throws ServiceException
	 */
	public List<ArchivoTXT> generarArchivosRecaudo(String fecha, String ruta) throws ServiceException
	{
		List<ArchivoTXT> archivos = null;
		
			try
			{
				init();
				
				// Estos StringTokenizer leen del properties una cadena de Nits separados por coma, para los cuales 
				// se deben hacer validaciones especificas.
				
				Map<String, String> nitsEspecialesCab1 		= cargarMapFromStringTokenizer(new StringTokenizer(ManejoParam.getParam("nits.especificos.cabecera1"),","));
				Map<String, String> nitsEspecialesCab2 		= cargarMapFromStringTokenizer(new StringTokenizer(ManejoParam.getParam("nits.especificos.cabecera2"),","));
				Map<String, String> nitsEspecialesDet  		= cargarMapFromStringTokenizer(new StringTokenizer(ManejoParam.getParam("nits.especificos.detalle"),","));
				Map<String, String> nitsEspecialesFinal1  	= cargarMapFromStringTokenizer(new StringTokenizer(ManejoParam.getParam("nits.especificos.final1"),","));
				Map<String, String> nitsEspecialesFinal2  	= cargarMapFromStringTokenizer(new StringTokenizer(ManejoParam.getParam("nits.especificos.final2"),","));
				
				
				
				// Para cada NIT se genera un archivo
				// Se cuentan los registros del archico
				
				for(String nit : recaudosServiciosPublicosDAO.getNITsRecaudo())
				{
					total = new BigDecimal(GeneralConstants.STRING_ZERO);
					this.numDetalles = 0;
					
					String nitSinDigito = nit.substring(0, nit.length()-1);
					
					if(archivos == null)
						archivos = new ArrayList<ArchivoTXT>();
					
					ArchivoTXT archivoTXT = new ArchivoTXT();
					archivoTXT.setFecha(fecha);
					archivoTXT.setFechaGeneracion(Fechas.getDateActual());
					archivoTXT.setFechaGeneracion(Formatos.quitarformatoDate(archivoTXT.getFechaGeneracion()).toString());
					archivoTXT.setNombre(ManejoParam.getParam("archivo.nombre.parte1") + fecha + ManejoParam.getParam("archivo.nombre.parte2") + GeneralConstants.STRING_ZERO + nitSinDigito);
					archivoTXT.setRuta(ruta);
					archivoTXT.setArchivo(new File(archivoTXT.getRuta()+archivoTXT.getNombre()+ManejoParam.getParam("archivo.extension")));
					
					boolean isFirstRecord = true;
					int fila = 0;
					RecaudoServiciosPublicosVO recaudoServiciosPublicosVOTemp = null;
					
					// se buscan los recaudos del nit, y se recorren los registros 
					
					List<RecaudoServiciosPublicosVO> recaudos = recaudosServiciosPublicosDAO.getInfRecaudosNIT(nit, Formatos.formatoDate(fecha));
					
					if(recaudos != null && !recaudos.isEmpty())
					{
						for(RecaudoServiciosPublicosVO recaudoServiciosPublicosVO : recaudos)
						{
							this.numDetalles ++;
							recaudoServiciosPublicosVOTemp = recaudoServiciosPublicosVO;
							total = total.add(new BigDecimal(recaudoServiciosPublicosVO.getValor()));
							recaudoServiciosPublicosVO.setNit(nitSinDigito);
							
							// solo en el primer registro se agregan las cabeceras del archivo
							
							if(isFirstRecord)
							{				
								isFirstRecord = false;
								
								agregaEncabezado1(recaudoServiciosPublicosVO, archivoTXT, nitsEspecialesCab1, fila);
							
								if(nitsEspecialesCab2.containsKey(recaudoServiciosPublicosVO.getNit()))
								{
									fila++;
									agregaEncabezado2(recaudoServiciosPublicosVO, archivoTXT, nitsEspecialesCab2, fila);								
								}							
							}
							
							fila++;
							agregaDetalle(recaudoServiciosPublicosVO, archivoTXT, nitsEspecialesDet, fila);
							
						}
						
						// Se agregan lineas de finalizacion al archivo
						fila++;
						agregaFinalizacion1(recaudoServiciosPublicosVOTemp, archivoTXT, nitsEspecialesFinal1, fila);
											
						if(nitsEspecialesCab2.containsKey(recaudoServiciosPublicosVOTemp.getNit()))
						{
							fila++;
							agregaFinalizacion2(recaudoServiciosPublicosVOTemp, archivoTXT, nitsEspecialesFinal2, fila);
						}						
					}
							
					
					archivos.add(archivoTXT);
					
				}
			}
			catch(Exception exe)
			{
				throw new ServiceException("Problema en generacion de archivos "+exe);
			}
		
		return archivos;
	}
		
	
	private void agregaDetalle(RecaudoServiciosPublicosVO recaudoServiciosPublicosVO, ArchivoTXT archivoTXT, Map<String, String> nitsEspeciales, int fila)
	{

		DatoColumnaTXT tipoRegistro = new DatoColumnaTXT();
		tipoRegistro.setCaracterCompletar(GeneralConstants.STRING_ZERO);		
		tipoRegistro.setLongitud(2);

		DatoColumnaTXT referencia = new DatoColumnaTXT();
		referencia.setCaracterCompletar(GeneralConstants.STRING_ZERO);				

		DatoColumnaTXT referencia2 = new DatoColumnaTXT();
		referencia2.setCaracterCompletar(GeneralConstants.STRING_ZERO);				
		referencia2.setLongitud(30);

		DatoColumnaTXT valor = new DatoColumnaTXT();
		valor.setCaracterCompletar(GeneralConstants.STRING_ZERO);				
		valor.setDato(recaudoServiciosPublicosVO.getValor());
		
		DatoColumnaTXT decimales = new DatoColumnaTXT();
		decimales.setCaracterCompletar(GeneralConstants.STRING_ZERO);
		decimales.setLongitud(2);
		decimales.setDato(GeneralConstants.STRING_ZERO);

		DatoColumnaTXT pago = new DatoColumnaTXT();
		pago.setCaracterCompletar(GeneralConstants.STRING_ZERO);
		pago.setLongitud(2);
		pago.setDato("01");

		DatoColumnaTXT medioPago = new DatoColumnaTXT();
		medioPago.setCaracterCompletar(GeneralConstants.STRING_ZERO);
		medioPago.setLongitud(2);
		medioPago.setDato("01");

		DatoColumnaTXT operacion = new DatoColumnaTXT();
		operacion.setCaracterCompletar(GeneralConstants.STRING_ZERO);
		operacion.setLongitud(6);
		operacion.setDato(GeneralConstants.STRING_ZERO);

		DatoColumnaTXT autorizacion = new DatoColumnaTXT();
		autorizacion.setCaracterCompletar(GeneralConstants.STRING_ZERO);
		autorizacion.setLongitud(6);
		autorizacion.setDato(GeneralConstants.STRING_ZERO);

		DatoColumnaTXT entidad = new DatoColumnaTXT();
		entidad.setCaracterCompletar(GeneralConstants.STRING_ZERO);
		entidad.setLongitud(3);
		entidad.setDato("999");

		DatoColumnaTXT sucursal = new DatoColumnaTXT();
		sucursal.setCaracterCompletar(GeneralConstants.STRING_ZERO);
		sucursal.setLongitud(4);
		sucursal.setDato(recaudoServiciosPublicosVO.getCodigoSucursal());

		DatoColumnaTXT secuencia = new DatoColumnaTXT();
		secuencia.setCaracterCompletar(GeneralConstants.STRING_ZERO);
		secuencia.setLongitud(7);
		secuencia.setDato((this.numDetalles + 1)+"");

		DatoColumnaTXT espacios = new DatoColumnaTXT();
		espacios.setCaracterCompletar(GeneralConstants.STRING_ZERO);
		espacios.setLongitud(69);
		espacios.setDato(GeneralConstants.ESPACE);
		
		if(nitsEspeciales.containsKey(recaudoServiciosPublicosVO.getNit()))
			espacios.setCaracterCompletar(GeneralConstants.ESPACE);

		DatoColumnaTXT procedencia = new DatoColumnaTXT();
		procedencia.setCaracterCompletar(GeneralConstants.STRING_ZERO);
		procedencia.setLongitud(2);
		procedencia.setDato("01");

		if(nitsEspeciales.containsKey(recaudoServiciosPublicosVO.getNit()))
		{
			tipoRegistro.setDato("06");
			
			referencia.setLongitud(18);
			referencia.setDato(GeneralConstants.STRING_ZERO);
			
			// el dato de referencia del pago viene en el campo Referencia1
			
			referencia2.setDato(recaudoServiciosPublicosVO.getReferencia1());
			
			valor.setLongitud(12);			
		}
		else
		{
			tipoRegistro.setDato("02");

			referencia.setLongitud(25);
			referencia.setDato(recaudoServiciosPublicosVO.getReferencia1());
			
			valor.setLongitud(13);
		}
		
		archivoTXT.addlementoAFila(tipoRegistro, fila, 0);
		archivoTXT.addlementoAFila(referencia, fila, 1);

		if(nitsEspeciales.containsKey(recaudoServiciosPublicosVO.getNit()))
		{
			archivoTXT.addlementoAFila(referencia2, fila, 2);
			archivoTXT.addlementoAFila(valor, fila, 3);
			archivoTXT.addlementoAFila(decimales, fila, 4);
			archivoTXT.addlementoAFila(pago, fila, 5);
			archivoTXT.addlementoAFila(medioPago, fila, 6);
			archivoTXT.addlementoAFila(operacion, fila, 7);
			archivoTXT.addlementoAFila(autorizacion, fila, 8);
			archivoTXT.addlementoAFila(entidad, fila, 9);
			archivoTXT.addlementoAFila(sucursal, fila, 10);
			archivoTXT.addlementoAFila(secuencia, fila, 11);
			archivoTXT.addlementoAFila(espacios, fila, 12);
		}
		else
		{
			archivoTXT.addlementoAFila(valor, fila, 2);
			archivoTXT.addlementoAFila(procedencia, fila, 3);
			archivoTXT.addlementoAFila(secuencia, fila, 4);
		}
	}
	
	private void agregaEncabezado1(RecaudoServiciosPublicosVO recaudoServiciosPublicosVO, ArchivoTXT archivoTXT, Map<String, String> nitsEspeciales, int fila) throws Exception
	{
		String caracterCompletacion = GeneralConstants.STRING_ZERO;
		
		if(nitsEspeciales.containsKey(recaudoServiciosPublicosVO.getNit()))
			caracterCompletacion = GeneralConstants.ESPACE;
		
		DatoColumnaTXT tipoRegistro = new DatoColumnaTXT();
		tipoRegistro.setCaracterCompletar(caracterCompletacion);
		tipoRegistro.setDato("01");
		tipoRegistro.setLongitud(2);				
		
		DatoColumnaTXT empresa = new DatoColumnaTXT();
		empresa.setCaracterCompletar(caracterCompletacion);

		DatoColumnaTXT fechaRecaudo = new DatoColumnaTXT();
		fechaRecaudo.setLongitud(8);
		fechaRecaudo.setCaracterCompletar(caracterCompletacion);
		fechaRecaudo.setDato(Formatos.dateToNumber(recaudoServiciosPublicosVO.getFechaRecaudo()));

		DatoColumnaTXT entidad = new DatoColumnaTXT();
		entidad.setLongitud(3);
		entidad.setCaracterCompletar(caracterCompletacion);		

		DatoColumnaTXT cuenta = new DatoColumnaTXT();
		cuenta.setCaracterCompletar(caracterCompletacion);
		
		DatoColumnaTXT fechaArchivo = new DatoColumnaTXT();
		fechaArchivo.setCaracterCompletar(caracterCompletacion);
		fechaArchivo.setLongitud(8);
		fechaArchivo.setDato(archivoTXT.getFechaGeneracion());

		DatoColumnaTXT horaArchivo = new DatoColumnaTXT();
		horaArchivo.setCaracterCompletar(caracterCompletacion);
		horaArchivo.setLongitud(2);
		horaArchivo.setDato(Fechas.getHoraActualHora());
		
		if(Integer.parseInt(horaArchivo.getDato()) >= 12)
			horaArchivo.setDato((Integer.parseInt(horaArchivo.getDato()) + 2) + GeneralConstants.BLANK);

		DatoColumnaTXT minutoArchivo = new DatoColumnaTXT();
		minutoArchivo.setCaracterCompletar(caracterCompletacion);
		minutoArchivo.setLongitud(2);
		minutoArchivo.setDato(Fechas.getHoraActualMinuto());

		DatoColumnaTXT modoArchivo = new DatoColumnaTXT();
		modoArchivo.setCaracterCompletar(caracterCompletacion);
		modoArchivo.setLongitud(1);
		modoArchivo.setDato("A");

		DatoColumnaTXT tipoCuenta = new DatoColumnaTXT();
		tipoCuenta.setCaracterCompletar(caracterCompletacion);
		tipoCuenta.setLongitud(1);
		tipoCuenta.setDato("02");

		DatoColumnaTXT espacios = new DatoColumnaTXT();
		espacios.setCaracterCompletar(caracterCompletacion);
		espacios.setLongitud(108);
		espacios.setDato(GeneralConstants.ESPACE);

		// Hay logica que aplica solo para algunos Nits
		if(nitsEspeciales.containsKey(recaudoServiciosPublicosVO.getNit()))
		{
			
			//Empresa -  para el NIT 0891200200 siempre 8912002008, para el NIT 0891202203 siempre 0891202203
			empresa.setLongitud(10);
			entidad.setDato("065");
			
			if(recaudoServiciosPublicosVO.getNit().equals("891200200"))
				empresa.setDato("8912002008");
			else
			{
				if(recaudoServiciosPublicosVO.getNit().equals("891202203"))
					empresa.setDato("0891202203");
				else
					empresa.setDato(recaudoServiciosPublicosVO.getNit());				
			}
			
			if(recaudoServiciosPublicosVO.getCodigoSucursal().equals("06"))
				cuenta.setDato(ManejoParam.getParam("cuenta.sucursal.06"));
			else if(recaudoServiciosPublicosVO.getCodigoSucursal().equals("07"))
				cuenta.setDato(ManejoParam.getParam("cuenta.sucursal.07"));
			else if(recaudoServiciosPublicosVO.getCodigoSucursal().equals("08"))
				cuenta.setDato(ManejoParam.getParam("cuenta.sucursal.08"));
			else if(recaudoServiciosPublicosVO.getCodigoSucursal().equals("90"))
				cuenta.setDato(ManejoParam.getParam("cuenta.sucursal.90"));
			else
				cuenta.setDato("1");

			cuenta.setLongitud(17);
			cuenta.setCompletarDerecha(true);
		}
		else
		{
			empresa.setLongitud(13);
			empresa.setDato(recaudoServiciosPublicosVO.getNit());
			
			
			// Entidad - Para el NIT 814000704 y 891200686 siempre 051, para el resto 122
			
			if(recaudoServiciosPublicosVO.getNit().equals("814000704") || recaudoServiciosPublicosVO.getNit().equals("891200686"))
			{
				entidad.setDato(ManejoParam.getParam("entidad.nit.814000704.y.891200686"));
				cuenta.setDato(ManejoParam.getParam("cuenta.nit.814000704.y.891200686"));
			}				
			else
			{
				entidad.setDato(ManejoParam.getParam("entidad.nit.otros"));
				cuenta.setDato(ManejoParam.getParam("cuenta.nit.otros"));
			}
				
			
			cuenta.setLongitud(15);
		}
		
		
		archivoTXT.addlementoAFila(tipoRegistro, fila, 0);
		
		archivoTXT.addlementoAFila(empresa, fila, 1);
		
		archivoTXT.addlementoAFila(fechaRecaudo, fila, 2);
		
		archivoTXT.addlementoAFila(entidad, fila, 3);

		archivoTXT.addlementoAFila(cuenta, fila, 4);
		
		if(nitsEspeciales.containsKey(recaudoServiciosPublicosVO.getNit()))
		{
			archivoTXT.addlementoAFila(fechaArchivo, fila, 5);
			archivoTXT.addlementoAFila(horaArchivo, fila, 6);
			archivoTXT.addlementoAFila(minutoArchivo, fila, 7);
			archivoTXT.addlementoAFila(modoArchivo, fila, 8);
			archivoTXT.addlementoAFila(tipoCuenta, fila, 9);
			archivoTXT.addlementoAFila(espacios, fila, 10);
		}
		
	}
	
	private void agregaEncabezado2(RecaudoServiciosPublicosVO recaudoServiciosPublicosVO, ArchivoTXT archivoTXT, Map<String, String> nitsEspeciales, int fila)
	{
		
			DatoColumnaTXT tipoRegistro = new DatoColumnaTXT();
			tipoRegistro.setCaracterCompletar(GeneralConstants.STRING_ZERO);
			tipoRegistro.setDato("05");
			tipoRegistro.setLongitud(2);
	
			DatoColumnaTXT empresa = new DatoColumnaTXT();
			empresa.setCaracterCompletar(GeneralConstants.STRING_ZERO);
			empresa.setLongitud(10);

			DatoColumnaTXT ceros = new DatoColumnaTXT();
			ceros.setCaracterCompletar(GeneralConstants.STRING_ZERO);
			ceros.setDato(GeneralConstants.STRING_ZERO);
			ceros.setLongitud(3);

			DatoColumnaTXT numeroRegistro = new DatoColumnaTXT();
			numeroRegistro.setCaracterCompletar(GeneralConstants.STRING_ZERO);
			numeroRegistro.setDato("1");
			numeroRegistro.setLongitud(4);

			DatoColumnaTXT espacios = new DatoColumnaTXT();
			espacios.setCaracterCompletar(GeneralConstants.ESPACE);
			espacios.setLongitud(143);
			espacios.setDato(GeneralConstants.BLANK);


			if(recaudoServiciosPublicosVO.getNit().equals("891200200"))
				empresa.setDato("8912002008");
			else
			{
				if(recaudoServiciosPublicosVO.getNit().equals("891202203"))
					empresa.setDato("8912022039");
				else
					empresa.setDato(recaudoServiciosPublicosVO.getNit());				
			}


			archivoTXT.addlementoAFila(tipoRegistro, fila, 0);
			
			archivoTXT.addlementoAFila(empresa, fila, 1);
			
			archivoTXT.addlementoAFila(ceros, fila, 2);

			archivoTXT.addlementoAFila(numeroRegistro, fila, 3);
			
			archivoTXT.addlementoAFila(espacios, fila, 4);
				
	}
	private void agregaFinalizacion1(RecaudoServiciosPublicosVO recaudoServiciosPublicosVO, ArchivoTXT archivoTXT, Map<String, String> nitsEspeciales, int fila)
	{

		DatoColumnaTXT tipoRegistro = new DatoColumnaTXT();
		tipoRegistro.setCaracterCompletar(GeneralConstants.STRING_ZERO);		
		tipoRegistro.setLongitud(2);

		DatoColumnaTXT totalRegistros = new DatoColumnaTXT();
		totalRegistros.setCaracterCompletar(GeneralConstants.STRING_ZERO);		
		totalRegistros.setLongitud(9);
		totalRegistros.setDato(this.numDetalles + GeneralConstants.BLANK);

		DatoColumnaTXT totalValores = new DatoColumnaTXT();
		totalValores.setCaracterCompletar(GeneralConstants.STRING_ZERO);		
		totalValores.setDato(total.toString());

		DatoColumnaTXT decimales = new DatoColumnaTXT();
		decimales.setCaracterCompletar(GeneralConstants.STRING_ZERO);		
		decimales.setDato(GeneralConstants.STRING_ZERO);
		decimales.setLongitud(2);

		DatoColumnaTXT numlote = new DatoColumnaTXT();
		numlote.setCaracterCompletar(GeneralConstants.STRING_ZERO);		
		numlote.setDato("01");
		numlote.setLongitud(4);

		DatoColumnaTXT espacios = new DatoColumnaTXT();
		espacios.setCaracterCompletar(GeneralConstants.ESPACE);		
		espacios.setDato(GeneralConstants.BLANK);
		espacios.setLongitud(129);

		if(nitsEspeciales.containsKey(recaudoServiciosPublicosVO.getNit()))
		{
			tipoRegistro.setDato("08");
			totalValores.setLongitud(16);
		}
		else
		{
			// Para el NIT 0891200686 y 0814000704 siempre 09; para el resto siempre 03
			if(recaudoServiciosPublicosVO.getNit().equals("891200686") || recaudoServiciosPublicosVO.getNit().equals("814000704"))
				tipoRegistro.setDato("09");
			else
				tipoRegistro.setDato("03");
			
			totalValores.setLongitud(18);
		}
		
		archivoTXT.addlementoAFila(tipoRegistro, fila, 0);
		archivoTXT.addlementoAFila(totalRegistros, fila, 1);
		archivoTXT.addlementoAFila(totalValores, fila, 2);
		

		if(nitsEspeciales.containsKey(recaudoServiciosPublicosVO.getNit()))
		{
			archivoTXT.addlementoAFila(decimales, fila, 3);
			archivoTXT.addlementoAFila(numlote, fila, 4);
			archivoTXT.addlementoAFila(espacios, fila, 5);
		}

	}
	private void agregaFinalizacion2(RecaudoServiciosPublicosVO recaudoServiciosPublicosVO, ArchivoTXT archivoTXT, Map<String, String> nitsEspeciales, int fila)
	{
		DatoColumnaTXT tipoRegistro = new DatoColumnaTXT();
		tipoRegistro.setCaracterCompletar(GeneralConstants.STRING_ZERO);		
		tipoRegistro.setLongitud(2);
		tipoRegistro.setDato("09");

		DatoColumnaTXT totalRegistros = new DatoColumnaTXT();
		totalRegistros.setCaracterCompletar(GeneralConstants.STRING_ZERO);		
		totalRegistros.setLongitud(9);
		totalRegistros.setDato(this.numDetalles + GeneralConstants.BLANK);

		DatoColumnaTXT totalValores = new DatoColumnaTXT();
		totalValores.setCaracterCompletar(GeneralConstants.STRING_ZERO);		
		totalValores.setDato(total.toString());
		totalValores.setLongitud(16);

		DatoColumnaTXT decimales = new DatoColumnaTXT();
		decimales.setCaracterCompletar(GeneralConstants.STRING_ZERO);		
		decimales.setDato(GeneralConstants.STRING_ZERO);
		decimales.setLongitud(2);

		DatoColumnaTXT espacios = new DatoColumnaTXT();
		espacios.setCaracterCompletar(GeneralConstants.ESPACE);		
		espacios.setDato(GeneralConstants.BLANK);
		espacios.setLongitud(133);

		
		archivoTXT.addlementoAFila(tipoRegistro, fila, 0);
		archivoTXT.addlementoAFila(totalRegistros, fila, 1);
		archivoTXT.addlementoAFila(totalValores, fila, 2);
		archivoTXT.addlementoAFila(decimales, fila, 3);
		archivoTXT.addlementoAFila(espacios, fila, 4);
		
	}

	
	private Map<String, String> cargarMapFromStringTokenizer(StringTokenizer tokenizer)
	{
		
		Map<String, String>	map = new HashMap<String, String>(tokenizer.countTokens());
		
		while(tokenizer.hasMoreTokens())
		{
			map.put(tokenizer.nextToken(), GeneralConstants.BLANK);
		}
		
		return map;
	}
}
